查看原文
其他

Maven Optional & Exclusions使用区别

2018-01-17 javastack Java技术栈

Optional和Exclusions都是用来排除jar包依赖使用的,两者在使用上却是相反。

Optional定义后,该依赖只能在本项目中传递,不会传递到引用该项目的父项目中,父项目需要主动引用该依赖才行。

Exclusions则是主动排除子项目传递过来的依赖。

用法区别

Project-X -> Project-A

Project-A -> Project-B

  1. <project>

  2.  ...

  3.  <dependencies>

  4.    <dependency>

  5.      <groupId>sample.ProjectB</groupId>

  6.      <artifactId>Project-B</artifactId>

  7.      <version>1.0</version>

  8.      <scope>compile</scope>

  9.      <optional>true</optional>

  10.    </dependency>

  11.  </dependencies>

  12. </project>

如上X依赖A,A依赖B用的 <optional>true</optional>,这时B只能在A中使用,而不会主动传递到X中,X需要主动引用B才有B的依赖。

如果A不用 <optional>true</optional>引用B,则会传递到X中,X如果不需要B则需要主动排除A传递过来的B。

  1. <dependencies>

  2.    <dependency>

  3.      <groupId>sample.ProjectA</groupId>

  4.      <artifactId>Project-A</artifactId>

  5.      <version>1.0</version>

  6.      <scope>compile</scope>

  7.      <exclusions>

  8.        <exclusion>

  9.          <groupId>sample.ProjectB</groupId>

  10.          <artifactId>Project-B</artifactId>

  11.        </exclusion>

  12.      </exclusions>

  13.    </dependency>

  14. </dependencies>

所以,Optional和Exclusions都是用来控制依赖的传递,可以根据实际场景灵活应用。

更多具体的定义即说明可参考官方说明文档:

http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html

如果对你有用,欢迎分享到朋友圈

近期精选


福利:免费领取成为架构师四阶段资料

教程:Dubbo使用及源码全套解析视频

方案:分布式ID生成器的解决方案总结

面试:史上最全Java多线程面试题及答案

建议:10年老兵给程序员的10条建议


Java技术栈

长按二维码关注我们



架构|分布式|技术教程|面经




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存